﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//using DECOR.DL.DALC.SAPC.Proxy;
using CroslandSAP.Proxy;
using CROSLAND.BL.BE;
using System.Data;
using System.Text.RegularExpressions;
using System.Configuration;

namespace CROSLAND.DL.DALC.SAPC
{
    public class PedidoDALC : IPedidoDALC 
    {
        public static PedidoDALC Instance()
        {
            if (_instance == null)
            {
                lock (typeof(PedidoDALC))
                {
                    if (_instance == null)
                    {
                        _instance = new PedidoDALC();
                    }
                }
            }
            return _instance;
        }

        private PedidoDALC() { }
        private static volatile PedidoDALC _instance = null;

        /// <summary>
        /// crea el doc. comercial especificado pedido / oferta / NC
        /// </summary>
        /// <param name="pNumPedido">Número de pedido creado</param>
        /// <param name="pObjPedido">Información para crear el pedido</param>
        /// <returns>mensaje de resultado</returns>
        public string procesarPedido(out string pNumPedido, PedidoBE pObjPedido)
        {
            BAPISDHD1 Order_Header_In = new BAPISDHD1();
            Order_Header_In.Doc_Type = pObjPedido.CodTipoDoc;
            Order_Header_In.Sales_Org = pObjPedido.OrgVentas;
            Order_Header_In.Distr_Chan = pObjPedido.CanalDist;
            Order_Header_In.Division = pObjPedido.Sector;
            Order_Header_In.Sales_Grp = pObjPedido.CodGrupoVend;
            Order_Header_In.Sales_Off = pObjPedido.CodOficina;
            Order_Header_In.Req_Date_H = ParametroDALC.dateNetToSap(DateTime.Today);
            Order_Header_In.Doc_Date = ParametroDALC.dateNetToSap(DateTime.Today);
            Order_Header_In.Pmnttrms = pObjPedido.CondPago;
            Order_Header_In.Currency = pObjPedido.Moneda;
            //Order_Header_In.Purch_No_C = pObjPedido.OrdenCompra;
            
            string ex_Salesdocument = "";
            BAPISDITMTable ref_Order_items_in = new BAPISDITMTable();
            BAPISCHDLTable ref_Order_schedule_in = new BAPISCHDLTable();
            BAPICONDTable ref_Order_conditions_in = new BAPICONDTable();


            //Descuento Gerencia
            if (pObjPedido.CodTipoDoc == ParametroDALC.getParamValueStatic("CotizacionRep"))
            {
                List<DescuentoBE> lstD = new List<DescuentoBE>();
                lstD = pObjPedido.LstCond;
                DescuentoBE lstF = lstD.Find(X => X.Condicion == "ZD05");
                if (lstF != null)
                {
                    BAPICOND iCabCond = new BAPICOND();
                    iCabCond.Itm_Number = "000000";
                    iCabCond.Cond_Type = "ZD05";
                    iCabCond.Cond_Value = (lstF.Importe / 10);
                    ref_Order_conditions_in.Add(iCabCond);
                }
                else
                {
                    BAPICOND iCabCond = new BAPICOND();
                    iCabCond.Itm_Number = "000000";
                    iCabCond.Cond_Type = "ZD05";
                    iCabCond.Cond_Value = 0;
                    ref_Order_conditions_in.Add(iCabCond);
                }
            }
            //-------------------------------------------------------

            //decimal totaldesc = 0;
            BAPICOND icond; decimal pneto = 0m;
            foreach (DetalleBE itm in pObjPedido.Detalle)
            {
                string numVal = itm.Posicion;

                BAPISDITM i = new BAPISDITM();
                i.Itm_Number = numVal;
                i.Material = itm.CodMaterial;
                i.Plant = itm.CodCentro;                
                i.Short_Text = itm.DescMaterial;
                i.Currency = pObjPedido.Moneda;
                i.Target_Qty = Convert.ToDecimal(itm.Cantidad) * 1000;//3 decimales SIN separador
                //********Cotización VMS********
                i.Purch_No_S = itm.color;
                //******************************
                i.Ship_Point = itm.PuestoExp;
                if (pObjPedido.CodTipoDoc.Equals("ZC04"))
                {
                    i.Store_Loc = itm.CodAlmacen;
                }

                BAPISCHDL iosi = new BAPISCHDL();
                iosi.Itm_Number = numVal;
                iosi.Sched_Line = "001";
                iosi.Req_Qty = Convert.ToDecimal(itm.Cantidad);
                ref_Order_schedule_in.Add(iosi);
                ref_Order_items_in.Add(i);
                
                //Lista de Dctos:
                #region Tabla de condiciones
                foreach (DescuentoBE dcto in itm.LstCond)
                {
                    if (dcto.Importe != 0m && dcto.Manual) //falta añadir validación de que sea manual
                    {
                        icond = new BAPICOND();
                        icond.Itm_Number = numVal;
                        icond.Cond_Type = dcto.Condicion;
                        if (dcto.esPorcentaje)
                        {
                            icond.Cond_Value = dcto.Importe;
                        }
                        else
                        {
                            icond.Cond_Value = dcto.Importe * .1m;
                        }
                        //icond.Currency = pObjPedido.Moneda;
                        ref_Order_conditions_in.Add(icond);
                    }
                }
                //enviar Precio Neto e IGV (solo si no es cotización de repuestos
                if (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "DocRepuestos"))
                {
                    pneto = (pObjPedido.Total / ((pObjPedido.IGV / 100) + 1m));

                    icond = new BAPICOND();
                    icond.Itm_Number = numVal;
                    icond.Cond_Type = ParametroDALC.getParamValueStatic("CondNeto");
                    icond.Cond_Value = decimal.Round(pneto * .1m, 3);
                    icond.Condvalue = icond.Cond_Value;
                    ref_Order_conditions_in.Add(icond);

                    icond = new BAPICOND();
                    icond.Itm_Number = numVal;
                    icond.Cond_Type = ParametroDALC.getParamValueStatic("CondIGV");
                    icond.Cond_Value = pObjPedido.IGV;
                    icond.Condvalue = decimal.Round((pObjPedido.Total - pneto) * .1m, 3);//falta rescatar IGV
                    ref_Order_conditions_in.Add(icond);
                }
                else if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "DocRepuestos")) //mtejada 09.07.2013
                {
                    icond = new BAPICOND();
                    icond.Itm_Number = numVal;
                    icond.Cond_Type = ParametroDALC.getParamValueStatic("CondNeto");
                    icond.Cond_Value = decimal.Round(itm.Precio.Importe * .1m, 3);
                    icond.Condvalue = icond.Cond_Value;
                    ref_Order_conditions_in.Add(icond);
               
                }
                #endregion
            }

            BAPIPARNRTable ref_Order_partners = new BAPIPARNRTable();
            BAPIADDR1Table ref_partneraddresses = new BAPIADDR1Table();

            BAPIPARNR iop = new BAPIPARNR();
            BAPIADDR1 paddr = new BAPIADDR1();

            //-- corregir interlocutores para Cliente Eventual
            ClienteDALC objClienteDALC = ClienteDALC.Instance();
            ClienteBE objClienteBE = new ClienteBE();
            //objClienteDALC.leer(pObjPedido.CodCliente, "", "");

            if (objClienteBE != null && objClienteBE.Eventual)
            {
                InterlocutorBE objSolicitante = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocCliente"); });
            }
            //-----------------------------           
            string pRefDocCat = string.Empty;

            if (ref_Order_items_in != null || ref_Order_items_in.Count > 0)
            {
                foreach (BAPISDITM item in ref_Order_items_in)
                {
                    if (Order_Header_In.Refdoc_Cat != "")
                    {
                        item.Ref_Doc_Ca = Order_Header_In.Refdoc_Cat;
                    }
                }
            }
            ////------------------------------------------------
            string mail = "";
            int cont = 0; //rgutierrez 01.12.2011
            string linkAddress = ""; //rgutierrez 06.12.2011
            foreach (InterlocutorBE objInter in pObjPedido.Interlocutores)
            {
                iop = null; paddr = null;
                if (objInter.Cliente.Mail != null)
                    if (!objInter.Cliente.Mail.Equals(""))
                    {
                        mail = objInter.Cliente.Mail;
                        objInter.Cliente.Mail = string.Empty;
                    }
                if (ParametroDALC.esTipoX(objInter.Funcion, "IlocEmpresa"))
                {
                    if (!string.IsNullOrEmpty(objInter.Cliente.Codigo))
                    {
                        List<ClienteBE> lstCliCorregido = new List<ClienteBE>();
                        UsuarioWebBE objU = new UsuarioWebBE();
                        objU.CanalDist = pObjPedido.CanalDist;
                        objU.OrgVentas = pObjPedido.OrgVentas;
                        objU.sector = pObjPedido.Sector;

                        lstCliCorregido = ClienteDALC.Instance().buscarCliente(objInter.Cliente.Codigo, "", objU);

                        iop = new BAPIPARNR();
                        iop.Partn_Role = objInter.Funcion;
                        iop.Partn_Numb = objInter.Cliente.Codigo;
                        iop.Region = lstCliCorregido[0].region;
                        iop.City = lstCliCorregido[0].Ciudad;
                        iop.District = lstCliCorregido[0].Distrito;
                        if (objInter.Funcion.Equals("RG"))
                        {
                            iop.Region = objInter.Region;
                            iop.City = objInter.Poblacion;
                        }
                        #region
                        //if (objInter.Funcion.Equals(ParametroDALC.getParamValueStatic("IlocCliente")))// && !objInter.Cliente.Mail.Equals(""))
                        //{
                        //    ////iop.Langu = "S";
                        //    ////iop.Addr_Link = "$0001";
                        //    //--- falta tabla para mails...
                        //    paddr = new BAPIADDR1();
                        //    ////paddr.Addr_No = "$0001";
                        //    //paddr.E_Mail = objInter.Cliente.Mail;
                        //    paddr.Name = objInter.Cliente.Descripcion.Length > 35 ? objInter.Cliente.Descripcion.Substring(0, 35) : objInter.Cliente.Descripcion;
                        //    paddr.City = objInter.Cliente.Ciudad.Trim();
                        //    paddr.District = objInter.Cliente.Distrito.Trim();
                        //    paddr.Postl_Cod1 = objInter.Cliente.CodigoPostal.Trim();
                        //    paddr.Street = objInter.Cliente.Direccion.Trim();
                        //    paddr.Country = objInter.Cliente.Pais.Trim();
                        //    paddr.Langu = "ES";
                        //    paddr.Tel1_Numbr = objInter.Cliente.Telefono.Trim();
                        //    //paddr.Fax_Number =objInter.Cliente.  no hay datos para esto
                        //}
                        #endregion

                        if (!objInter.Funcion.Equals(ParametroDALC.getParamValueStatic("IlocAgTrans")))
                        {
                            //rgutierrez 16.11.2011
                            //iop.Name = objInter.Cliente.Descripcion.Length > 35 ? objInter.Cliente.Descripcion.Substring(0, 35) : objInter.Cliente.Descripcion;
                            //iop.Name_2 = objInter.Cliente.Descripcion.Length > 35 ? objInter.Cliente.Descripcion.Substring(35) : "";
                            List<string> nombres = new List<string>(Regex.Split(objInter.Cliente.Descripcion, @"(?<=\G.{35})"));
                            iop.Name = nombres[0];
                            iop.Name_2 = nombres.Count > 1 ? nombres[1] : "";
                            iop.Name_3 = nombres.Count > 2 ? nombres[2] : "";
                            iop.Name_4 = nombres.Count > 3 ? nombres[3] : "";

                            iop.Street = objInter.Cliente.Direccion;
                            iop.Postl_Code = objInter.Cliente.CodigoPostal;
                            iop.Telephone = objInter.Cliente.Telefono;
                            //--------------------------------
                            iop.Region = lstCliCorregido[0].region;
                            iop.City = lstCliCorregido[0].Ciudad;
                            iop.District = lstCliCorregido[0].Distrito;

                            if (objInter.Funcion.Equals("RG"))
                            {
                                iop.Region = objInter.Region;
                                iop.City = objInter.Poblacion;
                            }
                            //--------------------------------
                            iop.Title = ParametroDALC.getParamValueStatic("Tratamiento");
                            iop.Langu = "S";

                            //--- falta tabla para mails...
                            //       paddr = new BAPIADDR1();
                            //     paddr.E_Mail = objInter.Cliente.Mail;
                        }
                        iop.Country = objInter.Cliente.Pais;
                    }
                }
                else if (ParametroDALC.esTipoX(objInter.Funcion, "IlocPersona"))
                {
                    if (!string.IsNullOrEmpty(objInter.Persona.CodPersona))
                    {
                        iop = new BAPIPARNR();
                        iop.Partn_Role = objInter.Funcion;
                        iop.Partn_Numb = objInter.Persona.CodPersona;
                    }
                }
                if (iop != null)
                {
                    cont += 1;
                    linkAddress = "$000" + cont;
                    if (ParametroDALC.esTipoX(objInter.Funcion, "IlocStandard")) { iop.Addr_Link = linkAddress; }
                    ref_Order_partners.Add(iop);

                    //rgutierrez 01.12.2011
                    paddr = new BAPIADDR1();
                    paddr.Addr_No = linkAddress;
                    paddr.Name = iop.Name;
                    paddr.Name_2 = iop.Name_2;
                    paddr.Name_3 = iop.Name_3;
                    paddr.Name_4 = iop.Name_4;
                    paddr.City = iop.City;
                    paddr.Postl_Cod1 = iop.Postl_Code;
                    paddr.Street_Lng = iop.Street;
                    paddr.Country = iop.Country;
                    paddr.Langu = iop.Langu;
                    paddr.Tel1_Numbr = iop.Telephone;

                    paddr.District = iop.District;
                    paddr.Region = iop.Region;
                    if (objInter.Funcion.Equals(ParametroDALC.getParamValueStatic("IlocCliente")))
                    {
                        paddr.E_Mail = mail;
                    }
                    if (paddr != null) { ref_partneraddresses.Add(paddr); }
                }
                // if (paddr != null) { ref_partneraddresses.Add(paddr); }

            }

            //tabla de textos
            BAPISDTEXTTable t_text = new BAPISDTEXTTable();
            foreach (TextoBE objTextoItm in pObjPedido.Textos)
            {
                BAPISDTEXT itm = new BAPISDTEXT();
                if (objTextoItm.Posicion != string.Empty && objTextoItm.Posicion != null)
                {
                    itm.Itm_Number = objTextoItm.Posicion;
                }
                itm.Text_Id = objTextoItm.CodTexto;
                itm.Text_Line = objTextoItm.Descripcion;
                itm.Langu = objTextoItm.Langu;

                t_text.Add(itm);
            }

            List<TextoBE> lstDet = new List<TextoBE>();
            TextoBE txt = new TextoBE();
            DetalleBE det = new DetalleBE();
            for (int i = 0; i < pObjPedido.Detalle.Count; i++)
            {
                det = pObjPedido.Detalle[i];
                lstDet = det.Textos;
                if (lstDet != null && lstDet.Count > 0)
                {
                    foreach (TextoBE objTextoItm in det.Textos)
                    {
                        BAPISDTEXT itm = new BAPISDTEXT();
                        itm.Itm_Number = objTextoItm.Posicion;
                        itm.Text_Id = objTextoItm.CodTexto;
                        itm.Text_Line = objTextoItm.Descripcion;
                        itm.Langu = objTextoItm.Langu;

                        t_text.Add(itm);
                    }
                }
            }

            //devuelve el log del proceso
            BAPIRET2Table ref_Return0 = new BAPIRET2Table();
            string returnValue = "";

            //-------------------
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }

            ////-- verificar si se crea pedido/oferta/NC:
            //if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodOferta"))
            //{
                Order_Header_In.Qt_Valid_T = ParametroDALC.dateNetToSap(pObjPedido.FechaValidez);
                proxy.Zvmc_Sd_018(Order_Header_In, out returnValue, out ex_Salesdocument, ref ref_Order_conditions_in,
                                        ref ref_Order_items_in, ref ref_partneraddresses, ref ref_Order_partners,
                                        ref ref_Return0, ref ref_Order_schedule_in, ref t_text);
            //}
            ////-------------------
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            
            string retVal = "", retMsg = "";
            foreach (BAPIRET2 itemRet in ref_Return0)
            {
                ////rgutierrez 17.01.2012
                //if (itemRet.Type == "E" && itemRet.Row > 0)
                //{
                //    itemRet.Message = "Pos. " + (itemRet.Row * 10) + ": " + itemRet.Message;
                //}

                retVal += (itemRet.Type == "E") ? itemRet.Message + "\r\n" : "";
                retMsg += (itemRet.Type != "S" && itemRet.Type != "W") ? itemRet.Message + "\n" : "";
            }
            pNumPedido = ex_Salesdocument;
            if (returnValue == "X")
            {
                //--- grabar nif
                pObjPedido.NumPedido = ex_Salesdocument;
                InterlocutorBE objSolicitante = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocCliente"); });
                if (objSolicitante != null && objSolicitante.Cliente.Eventual)
                {
                    this.grabarNIF(pObjPedido);
                }

                BAPIRET2 itemRet = ref_Return0[ref_Return0.Count - 1];
                if (itemRet.Type == "S")
                {
                    retVal += itemRet.Message + "\n";
                }
                else
                {
                    retVal += "Se creó el doc. de ventas con el número: " + ex_Salesdocument + "\n";
                }
            }
            else
            {
                //--- si hubo error, muestra todo el mensaje de error.
                retVal = retMsg;
            }
            return retVal;
        }

        /// <summary>
        /// retorna la información del documento de ventas
        /// </summary>
        /// <param name="pNumPedido">número de pedido/oferta</param>
        /// <returns>Objeto con la información del pedido/oferta</returns>
        public PedidoBE leer(string pNumPedido, bool pLight)
        {
            PedidoBE retPedidoBE = new PedidoBE();
            List<InterlocutorBE> lstInterlocutores = new List<InterlocutorBE>();
            List<DetalleBE> lstDetalle = new List<DetalleBE>();

            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            //-------------------
            KONVTable t_konv = new KONVTable();
            VBAKTable t_vbak = new VBAKTable();
            VBAPTable t_vbap = new VBAPTable();
            VBEPTable t_vbep = new VBEPTable();
            VBKDTable t_vbkd = new VBKDTable();
            VBPATable t_vbpa = new VBPATable();
            T179TTable t_t179t = new T179TTable();
            ZSSD_PARTNERTable t_Partner = new ZSSD_PARTNERTable();

            BAPISDTEXTTable t_text = new BAPISDTEXTTable();
            proxy.Zvmc_Sd_016(pNumPedido, ref t_konv, ref t_Partner, ref t_t179t, ref t_text, ref t_vbak, ref t_vbap, ref t_vbep, 
                ref t_vbkd, ref t_vbpa);
            ////manejo de conexión
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            string reembolsable = string.Empty;
            proxy.Connection = null;
            if (t_vbak.Count == 0) { return null; }
            if (t_vbak.Count > 0)
            {
                VBAK item = t_vbak[0];

                reembolsable = item.Taxk6.Trim();
                retPedidoBE.SubtotalImp = item.Netwr;

                retPedidoBE.CodCliente = item.Kunnr;
                retPedidoBE.OrgVentas = item.Vkorg;
                retPedidoBE.CanalDist = item.Vtweg;
                retPedidoBE.Sector = item.Spart;
                retPedidoBE.CodOficina = item.Vkbur;
                retPedidoBE.CodGrupoVend = item.Vkgrp;
                retPedidoBE.CodTipoDoc = item.Auart;
                retPedidoBE.CondExp = item.Vsbed;
                //---
                retPedidoBE.Tratado = (item.Vbtyp.ToUpper() == "X" ? true : false);
                //retPedidoBE.TieneEntrega = (item.Taxk9.ToUpper() == "X" ? true : false);
                //---
                retPedidoBE.Referencia = item.Xblnr;
                retPedidoBE.DocOriginal = item.Vgbel;

                //retPedidoBE.CondPago = item.
                retPedidoBE.OrdenCompra = item.Bstnk;
                retPedidoBE.BloqueoEntrega = item.Lifsk;
                retPedidoBE.BloqueoFactura = item.Faksk;
                retPedidoBE.Motivo = item.Augru;
                retPedidoBE.Moneda = item.Waerk;
                retPedidoBE.Fecha = ParametroDALC.dateSapToNet(item.Audat);

                retPedidoBE.Mail = item.Crm_Guid.Trim();
                if (item.Bnddt != "00000000")
                {
                    retPedidoBE.FechaValidez = ParametroDALC.dateSapToNet(item.Bnddt);
                }
                if (item.Vdatu != "00000000")
                {
                    retPedidoBE.FechaEntrega = ParametroDALC.dateSapToNet(item.Vdatu);
                }

                VBKD itemkd = t_vbkd[0];
                retPedidoBE.FechaFacturacion = ParametroDALC.dateSapToNet(itemkd.Fkdat);
            }
            if (t_vbkd.Count > 0)
            {
                VBKD item = t_vbkd[0];

                retPedidoBE.GrupoCond = item.Kdkg1;
                retPedidoBE.CondPago = item.Zterm;
            }

            if (!pLight)
            {
                //-- interlocutores:
                //lstInterlocutores = this.listaInterlocutores(pNumPedido);
                foreach (ZSSD_PARTNER item in t_Partner)
                {
                    InterlocutorBE interl = new InterlocutorBE();
                    interl.Funcion = item.Parvw.ToString();
                    interl.Cliente.CodigoPostal = item.Post_Code1;
                    interl.Cliente.Telefono = item.Tel_Number;
                    interl.Cliente.Direccion = item.Street;
                    if (ParametroDALC.esTipoX(item.Parvw, "IlocEmpresa"))
                    {
                        interl.Cliente.Codigo = item.Kunnr;
                        interl.Cliente.Descripcion = (item.Name + item.Name_2 + item.Name_3 + item.Name_4).Trim();
                        interl.Cliente.Ciudad = item.City1;
                        interl.Cliente.Ruc = item.Stcd1;
                    }
                    else if (ParametroDALC.esTipoX(item.Parvw, "IlocPersona"))
                    {
                        interl.Persona.CodPersona = item.Pernr;
                        interl.Persona.Descripcion = (item.Name + " " + item.Name_2).Trim();
                    }
                    interl.Poblacion = item.City1;
                    interl.Region = item.Region;
                    lstInterlocutores.Add(interl);
                }
                retPedidoBE.Interlocutores = lstInterlocutores;
            }

            decimal totalDcto = 0;
            decimal totalCab = 0;

            foreach (VBAP item in t_vbap)
            {
                DetalleBE objDet = new DetalleBE();
                objDet.Posicion = item.Posnr;
                objDet.CodMaterial = item.Matnr;
                objDet.CodUMedida = item.Meins;
                objDet.CodCentro = item.Werks;
                objDet.CodAlmacen = item.Lgort;
                objDet.CodLote = item.Charg;
                objDet.Posicion = item.Posnr;
                objDet.DescMaterial = item.Arktx;

                if (reembolsable != "")
                    objDet.Reembolsable = "(" + reembolsable + ")";

                //-- tipo de posición
                objDet.TipoPosicion = item.Pstyv;
                objDet.PosSup = item.Uepos;
                objDet.CantComp = item.Kmpmg;
                objDet.TipoPosAnt = item.Pstyv;
                //codigo de agrupación
                objDet.CodGrupoMat = item.Mvgr1;
                objDet.MotivoRechazo = item.Abgru;

                //-- material
                objDet.Material.CodMaterial = item.Matnr;
                objDet.Material.CodUMedida = item.Meins;
                //rhuapaya 18.06.2012 @@@ se agrego la jerarquia
                objDet.Material.Jerarquia = item.Prodh;

                //Agrego color a la posicion
                foreach (VBKD itm in t_vbkd)
                {
                    if (objDet.Posicion == itm.Posnr)
                    {
                        objDet.color = itm.Bstkd_E;
                    }
                }

                //validación de documento de transporte:
                if (ParametroDALC.esTipoX(retPedidoBE.CodTipoDoc, "CodTransporte"))
                {
                    objDet.Cantidad = item.Brgew;
                    objDet.Peso = item.Kwmeng;
                }
                //else if (ParametroDALC.esTipoX(retPedidoBE.CodTipoDoc, "CodNCZP01"))
                else if (ParametroDALC.esTipoX(retPedidoBE.CodTipoDoc, "CodNCND"))
                {
                    if (item.Zmeng == 0)
                        objDet.Cantidad = item.Kwmeng;
                    else
                        objDet.Cantidad = item.Zmeng;

                    //objDet.Cantidad = item.Zmeng;

                    objDet.Peso = item.Ntgew;
                }
                else
                {
                    objDet.Cantidad = item.Kwmeng; //Cantidad
                    objDet.Peso = item.Ntgew;
                }

                //repartos
                objDet.Repartos.Clear();

                foreach (VBEP item2 in t_vbep)
                {
                    if (item2.Posnr == item.Posnr)
                    {
                        RepartoBE itmRep = new RepartoBE();
                        itmRep.CantConf = item2.Bmeng;
                        itmRep.CantPed = item2.Wmeng;
                        itmRep.Pos = (int.Parse(item2.Etenr)).ToString();
                        itmRep.FechaEntrega = ParametroDALC.dateSapToNet(item2.Edatu);
                        itmRep.TipoReparto = item2.Ettyp.Trim();
                        objDet.Repartos.Add(itmRep);

                        if (item2.Etenr == "0001")
                        {
                            //objDet.FechaEntrega = ParametroDALC.dateSapToNet(item2.Edatu);
                        }
                        if (item2.Bmeng > 0m)
                        {
                            objDet.CantConfirmada = item2.Bmeng;
                            objDet.FechaCantConf = ParametroDALC.dateSapToNet(item2.Edatu);
                        }
                    }
                }
                objDet.PrioridadEntrega = item.Lprio;

                //condiciones
                objDet.PrecioSinIGV = item.Netpr;
                objDet.TotalImpresion = item.Kzwi3;
                DescuentoBE cond = null;

                foreach (KONV item3 in t_konv)
                {
                    if (item3.Kposn == item.Posnr)
                    {
                        if (ParametroDALC.esTipoX(item3.Kschl, "CondPrecios"))
                        {
                            objDet.Precio.Valor = item3.Kwert;
                            objDet.Precio.Importe = item3.Kbetr ;
                            //--añadir, tmb, a la lista de condiciones de la posición
                            cond = new DescuentoBE();
                            cond.Condicion = item3.Kschl; cond.Importe = item3.Kbetr; cond.Valor = item3.Kwert;
                            objDet.LstCond.Add(cond);
                            
                            //totalCab += item3.Kwert;
                        }
                        else if (item3.Kschl.Equals(ParametroDALC.getParamValueStatic("CondIgv")))
                        {
                            objDet.Igv.Valor = item3.Kwert;
                            objDet.Igv.Importe = item3.Kbetr;
                        }
                        else
                        {
                            //falta revisar asignación dctos y recargos
                            if (retPedidoBE.CodTipoDoc == "Z013")
                            {
                                if (item3.Kschl == "YP03")
                                {
                                    objDet.Precio.Valor = item3.Kwert;
                                    objDet.Precio.Importe = item3.Kbetr;

                                    cond = new DescuentoBE();
                                    cond.esPorcentaje = false;
                                    cond.Manual = true;
                                    cond.Condicion = ParametroDALC.getParamValueStatic("CondAnticipo"); cond.Importe = item3.Kbetr; cond.Valor = item3.Kwert;
                                    objDet.LstCond.Add(cond);
                                }
                            }
                            else
                            {
                                cond = new DescuentoBE();
                                cond.Condicion = item3.Kschl; cond.Importe = item3.Kbetr; cond.Valor = item3.Kwert / objDet.Cantidad;
                                objDet.LstCond.Add(cond);
                                if (item3.Kschl == "ZD01")
                                {
                                    totalDcto += item3.Kwert;
                                }
                            }
                        }
                    }
                    else {
                        if (retPedidoBE.CodTipoDoc == ParametroDALC.getParamValueStatic("DocRepuestos") && item3.Kposn == "000000")
                        {
                            if (retPedidoBE.LstCond == null)
                            {
                                retPedidoBE.LstCond = new List<DescuentoBE>();
                                DescuentoBE condN = new DescuentoBE();
                                condN.Condicion = "ZD05";
                                condN.Valor = item3.Kbetr;
                                condN.Importe = item3.Kbetr;
                                retPedidoBE.LstCond.Add(condN);
                            }
                        }
                    }
                }
                lstDetalle.Add(objDet);
            }

            if (retPedidoBE.LstCond == null)
            {
                retPedidoBE.LstCond = new List<DescuentoBE>();
            }

            //para el agrupamiento de produtos por jerarquia @@@
            foreach (DetalleBE item in lstDetalle)
            {
                if (item.Material.Jerarquia != null && item.Material.Jerarquia != "")
                {
                    foreach (T179T _item in t_t179t)
                    {
                        if (_item.Prodh == item.Material.Jerarquia.Substring(0, 2))
                        {
                            item.JerarquiaPrincipalDesc = _item.Vtext;
                            break;
                        }
                    }
                }
            }

            List<DetalleBE> lstDet = new List<DetalleBE>();
            lstDet = lstDetalle;
            List<TextoBE> lstTextos = new List<TextoBE>();
            char[] delimitador = { '-' };
            foreach (BAPISDTEXT item in t_text)
            {
                TextoBE objTxt = new TextoBE();
                if (item.Itm_Number != "000000")
                {
                    //DetalleBE objItem = lstDetalle.Find(X => X.Posicion == objTxt.Posicion);
                    DetalleBE objItem = lstDetalle.Find(delegate(DetalleBE obj) { return obj.Posicion == item.Itm_Number; });
                    objTxt.Posicion = item.Itm_Number;
                    objTxt.CodTexto = item.Text_Id;
                    objTxt.Descripcion = item.Text_Line;
                    objItem.Textos.Add(objTxt);
                }
                else
                {
                    //objTxt.Posicion = item.Itm_Number;
                    objTxt.CodTexto = item.Text_Id;
                    objTxt.Descripcion = item.Text_Line;
                    lstTextos.Add(objTxt);
                }
            }

            retPedidoBE.Detalle = lstDetalle;
            retPedidoBE.NumPedido = pNumPedido;
            retPedidoBE.Textos = lstTextos;
            return retPedidoBE;
        }

        /// <summary>
        /// modifica la información del pedido/oferta
        /// </summary>
        /// <param name="pObjPedido">Objeto que contiene la información del pedido/oferta</param>
        /// <returns>mensaje resultado</returns>
        public string modificar(out bool pOk, PedidoBE pObjPedido)
        {
            //InterlocutorBE objSolicitante = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocCliente"); });
            ////validando que el cliente eventual tenga un ruc @@@@ rhuapaya 30.07.2012
            //if (objSolicitante.Cliente.Ruc == null || objSolicitante.Cliente.Ruc.Trim() == "")
            //{
            //    throw new Exception("El cliente necesita un número de RUC");
            //}

            PedidoBE retObj = new PedidoBE(); List<DetalleBE> lstDetalle = new List<DetalleBE>();
            ////-------------------
            string p_Ok = "";

            ////-- cabecera
            BAPISDH1Table t_header_in = new BAPISDH1Table();
            BAPISDH1 t_header_in_item = new BAPISDH1();

            t_header_in_item.Sales_Grp = pObjPedido.CodGrupoVend;
            t_header_in_item.Sales_Off = pObjPedido.CodOficina;
            t_header_in_item.Distr_Chan = pObjPedido.CanalDist;
            t_header_in_item.Sales_Org = pObjPedido.OrgVentas;
            t_header_in_item.Division = pObjPedido.Sector;
            //t_header_in_item.Req_Date_H = ParametroDALC.dateNetToSap(pObjPedido.FechaEntrega);
            t_header_in_item.Req_Date_H = ParametroDALC.dateNetToSap(pObjPedido.Fecha);
            t_header_in_item.Doc_Date = ParametroDALC.dateNetToSap(pObjPedido.Fecha);

            t_header_in_item.Bill_Date = ParametroDALC.dateNetToSap(pObjPedido.FechaFacturacion);//////

            t_header_in_item.Dlv_Block = pObjPedido.BloqueoEntrega;
            t_header_in_item.Bill_Block = pObjPedido.BloqueoFactura;
            t_header_in_item.Cstcndgrp1 = pObjPedido.GrupoCond;
            t_header_in_item.Ord_Reason = pObjPedido.Motivo;

            t_header_in_item.Pmnttrms = pObjPedido.CondPago;

            t_header_in_item.Ship_Cond = pObjPedido.CondExp;
            t_header_in_item.Purch_No_C = pObjPedido.OrdenCompra;
            t_header_in_item.Currency = pObjPedido.Moneda;

            //modificar validez de la oferta:
            if (ParametroDALC.esOferta(pObjPedido.CodTipoDoc))
            {
                t_header_in_item.Qt_Valid_T = ParametroDALC.dateNetToSap(pObjPedido.FechaValidez);
            }
            //-------------------
            t_header_in.Add(t_header_in_item);

            //-- interlocutores
            BAPIPARNRTable t_partners = new BAPIPARNRTable();
            foreach (InterlocutorBE iloc in pObjPedido.Interlocutores)
            {
                BAPIPARNR t_partners_item = new BAPIPARNR();
                t_partners_item.Partn_Role = iloc.Funcion;

                if (iloc.Funcion.Equals("Z3"))
                {
                    t_partners_item.Name = iloc.Cliente.Descripcion;
                }
                if (ParametroDALC.esTipoX(iloc.Funcion, "IlocEmpresa"))
                {
                    if (!string.IsNullOrEmpty(iloc.Cliente.Codigo))
                    {
                        t_partners_item.Partn_Numb = iloc.Cliente.Codigo;
                        if (!iloc.Funcion.Equals(ParametroDALC.getParamValueStatic("IlocAgTrans")))
                        {
                            t_partners_item.Name = iloc.Cliente.Descripcion.Length > 35 ? iloc.Cliente.Descripcion.Substring(0, 35) : iloc.Cliente.Descripcion;
                            t_partners_item.Name_2 = iloc.Cliente.Descripcion.Length > 35 ? iloc.Cliente.Descripcion.Substring(35) : "";
                            t_partners_item.Refobjkey = iloc.Cliente.Direccion;
                            t_partners_item.Postl_Code = iloc.Cliente.CodigoPostal;
                            t_partners_item.City = iloc.Cliente.Ciudad;
                            t_partners_item.Telephone = iloc.Cliente.Telefono;
                            t_partners_item.Title = ParametroDALC.getParamValueStatic("Tratamiento");
                            t_partners_item.Langu = "S";

                        }
                        t_partners_item.Country = iloc.Cliente.Pais;

                        t_partners.Add(t_partners_item);
                    }
                }
                else if (ParametroDALC.esTipoX(iloc.Funcion, "IlocPersona"))
                {
                    if (!string.IsNullOrEmpty(iloc.Persona.CodPersona))
                    {
                        t_partners_item.Country = "PE";
                        t_partners_item.Title = ParametroDALC.getParamValueStatic("Tratamiento");
                        t_partners_item.Partn_Numb = iloc.Persona.CodPersona;
                        t_partners.Add(t_partners_item);
                    }
                }
            }
            //siempre tiene q mandar el Encargado Comercial!
            string pFuncEncComercial = ParametroDALC.getParamValueStatic("IlocVendedor1");
            int idx = t_partners.FindBy("Partn_Role", pFuncEncComercial);
            if (idx <= 0)
            {
                BAPIPARNR t_partners_itemVE = new BAPIPARNR();
                t_partners_itemVE.Partn_Role = pFuncEncComercial;
                t_partners.Add(t_partners_itemVE);
            }
            //----
            BAPISCHDLTable t_schdl_in = new BAPISCHDLTable();
            BAPISDITMTable t_item_in = new BAPISDITMTable();
            BAPICONDTable t_conditions_in = new BAPICONDTable();

            foreach (DetalleBE objDetalle in pObjPedido.Detalle)
            {
                //--- schedule / vbep / repartos
                BAPISCHDL t_schdl_in_item;
                foreach (RepartoBE itmRep in objDetalle.Repartos)
                {
                    if (itmRep.CantPed > 0m || itmRep.CantConf > 0m)
                    {
                        t_schdl_in_item = new BAPISCHDL();
                        t_schdl_in_item.Itm_Number = objDetalle.Posicion;
                        t_schdl_in_item.Sched_Line = itmRep.Pos;
                        t_schdl_in_item.Req_Date = ParametroDALC.dateNetToSap(itmRep.FechaEntrega);
                        //t_schdl_in_item.Req_Qty = itmRep.CantPed;
                        t_schdl_in_item.Req_Qty = objDetalle.Cantidad;
                        t_schdl_in.Add(t_schdl_in_item);
                    }
                }
                //-----------------------------------

                BAPISDITM t_item_in_item = new BAPISDITM();
                t_item_in_item.Itm_Number = objDetalle.Posicion;
                t_item_in_item.Material = objDetalle.CodMaterial;
                t_item_in_item.Target_Qty = objDetalle.Cantidad;
                t_item_in_item.Target_Qu = objDetalle.CodUMedida;
                t_item_in_item.Plant = objDetalle.CodCentro;
                t_item_in_item.Short_Text = objDetalle.DescMaterial;
                //--- tipo de posición
                t_item_in_item.Item_Categ = objDetalle.TipoPosicion;
                t_item_in_item.Hg_Lv_Item = objDetalle.PosSup;
                t_item_in_item.Ship_Point = objDetalle.PuestoExp;
                t_item_in.Add(t_item_in_item);

                //-- condiciones
                BAPICOND t_conditions_in_item = null;
                foreach (DescuentoBE objDcto in objDetalle.LstCond)
                {

                    if (ParametroDALC.esTipoX(objDcto.Condicion, "CondPrecios") || !objDcto.Manual || objDcto.Importe.Equals(0m)) {
                        if (pObjPedido.CodTipoDoc.Equals("ZC04"))
                        {
                            t_conditions_in_item = new BAPICOND();
                            t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                            t_conditions_in_item.Cond_Type = "ZVP1";
                            t_conditions_in_item.Cond_Value = decimal.Round(objDetalle.Precio.Importe * .1m, 3);
                            t_conditions_in_item.Condvalue = t_conditions_in_item.Cond_Value;
                            t_conditions_in.Add(t_conditions_in_item);
                        }
                        continue; 
                    }
                    t_conditions_in_item = new BAPICOND();
                    t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                    t_conditions_in_item.Cond_Type = objDcto.Condicion;
                    if (objDcto.esPorcentaje)
                    {
                        t_conditions_in_item.Cond_Value = objDcto.Importe;// *.1m;
                    }
                    else
                    {
                        t_conditions_in_item.Cond_Value = objDcto.Importe *.1m;
                    }
                    t_conditions_in_item.Cond_St_No = objDcto.Cond_St_No; //"111";
                    t_conditions_in_item.Cond_Count = objDcto.Cond_Count; //"01";
                    t_conditions_in.Add(t_conditions_in_item);
                }
            }

            BAPISDTEXTTable t_text = new BAPISDTEXTTable();
            foreach (TextoBE objTextoItm in pObjPedido.Textos)
            {
                BAPISDTEXT itm = new BAPISDTEXT();
                itm.Text_Id = objTextoItm.CodTexto;
                itm.Text_Line = objTextoItm.Descripcion;
                itm.Langu = objTextoItm.Langu;

                t_text.Add(itm);
            }

            BAPIRET2Table t_return = new BAPIRET2Table();

            //-- conexion
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }

            if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodOferta"))
            {
                proxy.Zvmc_Sd_019(pObjPedido.NumPedido, out p_Ok, ref t_conditions_in, ref t_header_in, ref t_item_in, ref t_partners, ref t_return, ref t_schdl_in, ref t_text);
            }
            else if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "Anticipo"))
            {
                proxy.Zvmc_Sd_041(pObjPedido.NumPedido, out p_Ok, ref t_conditions_in, ref t_header_in,
                                            ref t_item_in, ref t_partners, ref t_return, ref t_schdl_in, ref t_text);
            }


            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            ////-------------------

            string retVal = "", retMsg = ""; 
            pOk = false;
            foreach (BAPIRET2 itemRet in t_return)
            {
                retVal += (itemRet.Type == "E") || (itemRet.Type == "A") ? itemRet.Message + " " : "";
                retMsg += (itemRet.Type != "S" && itemRet.Type != "W") ? itemRet.Message + " " : "";
            }
            if (string.IsNullOrEmpty(retVal))
            {
                pOk = true;
                ClienteBE objClienteBE = new ClienteBE();
                //(ClienteDALC.Instance()).leer(pObjPedido.CodCliente, "", "");
                if (objClienteBE != null && objClienteBE.Eventual)
                {
                    //--- grabar nif
                    //this.grabarNIF(pObjPedido);
                }
                BAPIRET2 itemRet = t_return[t_return.Count - 1];
                if (itemRet.Type == "S")
                {
                    retVal += itemRet.Message + " ";
                }
                else
                {
                    retVal += "Doc. de venta " + pObjPedido.NumPedido + " se ha grabado. ";
                }
            }
            else
            {
                //--- si hubo error, muestra todo el mensaje de error.
                retVal = retMsg;
            }
            return retVal;
        }

        /// <summary>
        /// función para calcular los precios (Zweb_Calcular_Precio)
        /// </summary>
        /// <param name="pObjPedido">obj con info del doc.</param>
        /// <param name="pItem">obj con el item que se va a tratar</param>
        /// <param name="retval">mensaje de error o vacío si no hay error</param>
        /// <returns>Lista de condiciones</returns>
        public List<DescuentoBE> calcularPrecios(PedidoBE pObjPedido, DetalleBE pItem, out string retval)
        {
            string p_Ok = "", p_Msg = "";//, p_band = "";
            BAPICONDTable t_cond = new BAPICONDTable();
            BAPICOND itm = null;

            DescuentoBE dctoTmp = pItem.LstCond.Find(X => X.Importe != 0 && X.Manual);
            if (dctoTmp != null) //Si se envía algún dcto manual, entonces se envían todas las condiciones a la función
            {
                foreach (DescuentoBE dctoItm in pItem.LstCond)
                {
                    //if (dctoItm.Importe != 0 && dctoItm.Manual)
                    {
                        itm = new BAPICOND();
                        itm.Itm_Number = pItem.Posicion;
                        itm.Cond_Type = dctoItm.Condicion;
                        itm.Cond_Value = Math.Abs(dctoItm.Importe);
                        t_cond.Add(itm);
                    }
                }
                //if (t_cond.Count > 0)//si se añadieron cond manuales:
                //{
                //    itm = new BAPICOND();
                //    itm.Itm_Number = pItem.Posicion;
                //    itm.Cond_Type = pItem.Precio.Condicion;
                //    itm.Cond_Value = pItem.Precio.Importe;
                //    t_cond.Add(itm);
                //}
            }

            MaterialDALC pObjMaterialDALC = MaterialDALC.Instance();
            MaterialBE pObjMaterialBE = new MaterialBE();
            //-- Connection handle...
            PrecioProxy proxy = new PrecioProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            //------------------------------------------------------------------
            //string pZipCode;
            //try
            //{
            //    string pIlocDM = ParametroDALC.getParamValueStatic("IlocDestMerc");
            //    InterlocutorBE objIlocDM = pObjPedido.Interlocutores.Find(X => X.Funcion == pIlocDM);
            //    pZipCode = objIlocDM.Cliente.CodigoPostal;
            //}
            //catch { pZipCode = string.Empty; }
            //------------------------------------------------------------------
            string codPob = "";
            try
            {
                codPob = pObjPedido.Interlocutores.Find(x => x.Funcion == "RG").Poblacion;
            }
            catch
            {
                codPob = "";
            }
            proxy.Zvmc_Sd_008(pObjPedido.CodTipoDoc, pItem.Cantidad, pItem.CodLote == null ? "" : pItem.CodLote,
                ParametroDALC.dateNetToSap(pObjPedido.Fecha),
                "", pObjPedido.GrupoCond == null ? "" : pObjPedido.GrupoCond, pObjPedido.CodCliente,
                pItem.CodMaterial, pItem.Posicion,
                pObjMaterialBE.Jerarquia == null ? "" : pObjMaterialBE.Jerarquia, pObjPedido.Sector, "",
                pObjPedido.DocOriginal, pObjPedido.CodOficina,
                pObjPedido.OrgVentas, "", pObjPedido.CanalDist,
                pItem.CodCentro == null ? "" : pItem.CodCentro, pObjPedido.CondPago, codPob, ref t_cond);

            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            //-------------------

            List<DescuentoBE> lstDescuentos = new List<DescuentoBE>();
            DataTable dt = t_cond.ToADODataTable();
            foreach (DataRow dr in dt.Rows)
            {
                DescuentoBE obj = new DescuentoBE();
                obj.Condicion = dr["COND_TYPE"].ToString();
                obj.Moneda = dr["CURRENCY"].ToString();
                obj.Importe = Convert.ToDecimal(dr["COND_VALUE"].ToString());
                obj.Valor = Convert.ToDecimal(dr["CONDVALUE"].ToString());
                obj.Cond_Count = dr["COND_COUNT"].ToString();
                obj.Cond_St_No = dr["COND_ST_NO"].ToString();

                DescuentoBE tmp = lstDescuentos.Find(X => X.Condicion == ParametroDALC.getParamValueStatic("CondPrecio1"));
                if (pObjPedido.Moneda.Equals("USD") && tmp == null &&
                    obj.Condicion != ParametroDALC.getParamValueStatic("CondDctoGerenciaMonto") &&
                    obj.Condicion != ParametroDALC.getParamValueStatic("CondPrecio1"))
                {
                    //Convertir de PEN a USD
                    obj.Valor = decimal.Round(obj.Valor / pObjPedido.TipoCambio, 2);
                    //obj.Importe = decimal.Round(obj.Importe / pObjPedido.TipoCambio, 2);
                }

                lstDescuentos.Add(obj);
            }
            retval = (p_Ok == "" ? "" : p_Msg);
            return lstDescuentos;
        }

        /// <summary>
        /// Función que retorna los status de cabecera del documento comercial.
        /// </summary>
        /// <param name="pNumPedido">nro de pedido</param>
        /// <returns>Estructura con varios status</returns>
        public StatusBE verStatus(string pNumPedido)
        {
            PedidosProxy p = new PedidosProxy();
            p.Connection = DALC.getConnection;
            try
            {
                if (!p.Connection.IsOpen) { p.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            PA0002Table noSirve = new PA0002Table();
            VBSTT vbstt_wa = new VBSTT();
            p.Zvmc_Sd_006(pNumPedido, out vbstt_wa, ref noSirve);
            //---
            SAP.Connector.SAPConnectionPool.ReturnConnection(p.Connection);
            p.Connection = null;
            //---
            StatusBE retval = null;
            if (vbstt_wa != null)
            {
                retval = new StatusBE();
                retval.Rechazo = vbstt_wa.Absta_Bez;
                retval.Global = vbstt_wa.Gbsta_Bez;
                retval.Entrega = vbstt_wa.Lfsta_Bez;
                retval.Credito = vbstt_wa.Cmgst_Bez;
                retval.Bloqueo = vbstt_wa.Spstg_Bez;
            }
            return retval;
        }

        /// <summary>
        /// Permite visualizar el detalle del documento de entrega
        /// </summary>
        /// <param name="pVbeln">Nro de entrega</param>
        /// <returns>Lista de posiciones de la entrega</returns>
        public List<EntregaBE> verEntrega(string pVbeln, string pvbtyp_n)
        {
            //PedidosProxy p = new PedidosProxy();
            //p.Connection = DALC.getConnection;
            //try
            //{
            //    if (!p.Connection.IsOpen) { p.Connection.Open(); }
            //}
            //catch
            //{
            //    throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            //}
            //LIPSTable lt_lips = new LIPSTable();
            //VBRPTable lt_vbrp = new VBRPTable();
            //VBAPTable lt_vbap = new VBAPTable();

            //p.Zweb_Ver_Entrega(pVbeln, pvbtyp_n, ref lt_lips, ref lt_vbap, ref lt_vbrp);


            ////---
            //SAP.Connector.SAPConnectionPool.ReturnConnection(p.Connection);
            //p.Connection = null;
            ////---
            List<EntregaBE> lstEntregas = new List<EntregaBE>();
            //EntregaBE objEntrega;

            //if (pvbtyp_n == "B" || pvbtyp_n == "C" || pvbtyp_n == "K" || pvbtyp_n == "H")
            //{
            //    //Documento de ventas: Datos de posición
            //    foreach (VBAP ls_vbap in lt_vbap)
            //    {
            //        objEntrega = new EntregaBE();
            //        objEntrega.Vbeln = ls_vbap.Vbeln;
            //        objEntrega.Posnr = ls_vbap.Posnr;
            //        objEntrega.Vgbel = ls_vbap.Vgbel;
            //        objEntrega.Vgpos = ls_vbap.Vgpos;
            //        objEntrega.Matnr = ls_vbap.Matnr;
            //        objEntrega.Meins = ls_vbap.Meins;
            //        objEntrega.Arktx = ls_vbap.Arktx;
            //        objEntrega.Werks = ls_vbap.Werks;
            //        objEntrega.Lgort = ls_vbap.Lgort;
            //        objEntrega.Charg = ls_vbap.Charg;
            //        objEntrega.Gewei = ls_vbap.Gewei;
            //        objEntrega.Ntgew = ls_vbap.Ntgew;
            //        objEntrega.Lfimg = ls_vbap.Kwmeng;
            //        lstEntregas.Add(objEntrega);
            //    }

            //}
            //else if (pvbtyp_n == "M" || pvbtyp_n == "N" || pvbtyp_n == "O" || pvbtyp_n == "S")
            //{    //Factura: Datos de posición

            //    foreach (VBRP ls_vbrp in lt_vbrp)
            //    {
            //        objEntrega = new EntregaBE();
            //        objEntrega.Vbeln = ls_vbrp.Vbeln;
            //        objEntrega.Posnr = ls_vbrp.Posnr;
            //        objEntrega.Vgbel = ls_vbrp.Vgbel;
            //        objEntrega.Vgpos = ls_vbrp.Vgpos;
            //        objEntrega.Matnr = ls_vbrp.Matnr;
            //        objEntrega.Meins = ls_vbrp.Meins;
            //        objEntrega.Arktx = ls_vbrp.Arktx;
            //        objEntrega.Werks = ls_vbrp.Werks;
            //        objEntrega.Lgort = ls_vbrp.Lgort;
            //        objEntrega.Charg = ls_vbrp.Charg;
            //        objEntrega.Gewei = ls_vbrp.Gewei;
            //        objEntrega.Ntgew = ls_vbrp.Ntgew;
            //        objEntrega.Lfimg = ls_vbrp.Fkimg;
            //        lstEntregas.Add(objEntrega);
            //    }
            //}
            //else
            //{

            //    foreach (LIPS ls_lips in lt_lips)
            //    {
            //        objEntrega = new EntregaBE();
            //        objEntrega.Vbeln = ls_lips.Vbeln;
            //        objEntrega.Posnr = ls_lips.Posnr;
            //        objEntrega.Vgbel = ls_lips.Vgbel;
            //        objEntrega.Vgpos = ls_lips.Vgpos;
            //        objEntrega.Matnr = ls_lips.Matnr;
            //        objEntrega.Meins = ls_lips.Meins;
            //        objEntrega.Arktx = ls_lips.Arktx;
            //        objEntrega.Werks = ls_lips.Werks;
            //        objEntrega.Lgort = ls_lips.Lgort;
            //        objEntrega.Charg = ls_lips.Charg;
            //        objEntrega.Gewei = ls_lips.Gewei;
            //        objEntrega.Lfimg = ls_lips.Lfimg;
            //        objEntrega.Ntgew = ls_lips.Ntgew;
            //        lstEntregas.Add(objEntrega);
            //    }
            //}
            return lstEntregas;
        }

        /// <summary>
        /// Devuelve la lista de documentos asociados en el flujo de un nro de pedido
        /// </summary>
        /// <param name="pNumPedido">Número de Pedido</param>
        /// <returns>Lista de documentos SeguimientoBE</returns>
        public List<SeguimientoBE> buscaDocumentos(string pNumPedido)
        {
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            ////-----------------
            ZSVMS_SEGUIMIENTOTable t_seguim = new ZSVMS_SEGUIMIENTOTable();
            proxy.Zvmc_Sd_025(pNumPedido, ref t_seguim);
            //-----------------
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            ////-----------------

            List<SeguimientoBE> lstSeguimiento = new List<SeguimientoBE>();
            foreach (ZSVMS_SEGUIMIENTO item in t_seguim)
            {
                SeguimientoBE objSeguimiento;

                objSeguimiento = new SeguimientoBE();
                objSeguimiento.Jerarquia = item.Docite; //"01";
                objSeguimiento.NumDocumento = item.Docnro; //"0020000161";
                objSeguimiento.TipoDocumento = item.Doctip; //"Ofertta DECOR";
                objSeguimiento.Estado = item.Docest; //"Pendiente";
                objSeguimiento.DocSeleccionado = item.Docsel == "X" ? true : false; //true;
                objSeguimiento.Referencia = item.Xblnr;
                objSeguimiento.DocFecha = ParametroDALC.dateSapToNet(item.Docfec);
                objSeguimiento.codTipoDoc = item.Vbtyp_N;
                lstSeguimiento.Add(objSeguimiento);
            }
            return lstSeguimiento;
        }

        /// <summary>
        /// función para grabar el NIF en pedidos con clientes eventuales
        /// </summary>
        /// <param name="pObjPedido">doc. de ventas</param>
        private void grabarNIF(PedidoBE pObjPedido)
        {
            string strRucAG = "", strRucRG = "";
            bool dniAG = false, dniRG = false;
            InterlocutorBE objSolicitante = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocCliente"); });
            //InterlocutorBE objResPago = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocResPago"); });
            if (objSolicitante != null && objSolicitante.Cliente != null)
            {
                if (!string.IsNullOrEmpty(objSolicitante.Cliente.Ruc))
                {
                    strRucAG = objSolicitante.Cliente.Ruc;
                    if (objSolicitante.Cliente.Ruc.Length == 8)
                    {
                        dniAG = true;
                    }//sino es ruc y queda en false
                }
            }
            //if (objResPago != null && objResPago.Cliente != null)
            //{
            //    if (!string.IsNullOrEmpty(objResPago.Cliente.Ruc))
            //    {
            //        strRucRG = objResPago.Cliente.Ruc;
            //        if (objResPago.Cliente.Ruc.Length == 8)
            //        {
            //            dniRG = true;
            //        }//sino es ruc y queda en false
            //    }
            //}

            //grabar solo si hay algún ruc
            if (!strRucAG.Equals(""))// || !strRucRG.Equals(""))
            {
                //-----------------------------------------
                PedidosProxy proxy = new PedidosProxy();
                proxy.Connection = DALC.getConnection;
                try
                {
                    if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
                }
                catch
                {
                    throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
                }
                //-----------------
                proxy.Zvmc_Sd_047(pObjPedido.CodTipoDoc, (dniAG ? "X" : ""), (dniRG ? "X" : ""), strRucAG, strRucRG, pObjPedido.RUCDNI, pObjPedido.NumPedido);
                //-----------------
                SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
                proxy.Connection = null;
                //-----------------
            }
        }

        private void grabarNIFPed(PedidoBE pObjPedido)
        {
            string strRucAG = "", strRucRG = "";
            bool dniAG = false, dniRG = false;
            InterlocutorBE objSolicitante = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocCliente"); });
            //InterlocutorBE objResPago = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocResPago"); });
            if (objSolicitante != null && objSolicitante.Cliente != null)
            {
                if (!string.IsNullOrEmpty(objSolicitante.Cliente.Ruc))
                {
                    strRucAG = objSolicitante.Cliente.Ruc;
                    if (objSolicitante.Cliente.Ruc.Length == 8)
                    {
                        dniAG = true;
                    }//sino es ruc y queda en false
                }
            }

            //grabar solo si hay algún ruc
            if (!strRucAG.Equals(""))// || !strRucRG.Equals(""))
            {
                //-----------------------------------------
                PedidosProxy proxy = new PedidosProxy();
                proxy.Connection = DALC.getConnection;
                try
                {
                    if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
                }
                catch
                {
                    throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
                }
                //-----------------
                proxy.Zvmc_Sd_050(pObjPedido.CodTipoDoc, (dniAG ? "X" : ""), (dniRG ? "X" : ""), strRucAG, strRucRG, pObjPedido.RUCDNI, pObjPedido.NumPedido);
                //-----------------
                SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
                proxy.Connection = null;
                //-----------------
            }
        }
        #region Crear Pedido Anticipo

        public string crearPedidoAnticipo(out string pNumPedido, PedidoBE pObjPedido)
        {
            BAPISDHD1 Order_Header_In = new BAPISDHD1();
            Order_Header_In.Doc_Type = pObjPedido.CodTipoDoc;
            Order_Header_In.Sales_Org = pObjPedido.OrgVentas;
            Order_Header_In.Distr_Chan = pObjPedido.CanalDist;
            Order_Header_In.Division = pObjPedido.Sector;
            Order_Header_In.Sales_Grp = pObjPedido.CodGrupoVend;
            Order_Header_In.Sales_Off = pObjPedido.CodOficina;
            Order_Header_In.Currency = pObjPedido.Moneda;

            string ex_Salesdocument = "";
            BAPISDITMTable ref_Order_items_in = new BAPISDITMTable();
            BAPISCHDLTable ref_Order_schedule_in = new BAPISCHDLTable();
            BAPICONDTable ref_Order_conditions_in = new BAPICONDTable();

            foreach (DetalleBE itm in pObjPedido.Detalle)
            {
                string numVal = itm.Posicion;

                BAPISDITM i = new BAPISDITM();
                i.Itm_Number = numVal;
                i.Material = itm.CodMaterial;
                i.Plant = itm.CodCentro;
                //i.Ship_Point = itm.PuestoExp;

                
                BAPISCHDL iosi = new BAPISCHDL();
                iosi.Itm_Number = numVal;
                iosi.Req_Qty = Convert.ToDecimal(itm.Cantidad);
                ref_Order_schedule_in.Add(iosi);
                ref_Order_items_in.Add(i);

                #region Tabla de condiciones

                BAPICOND icond; decimal pneto = 0m;
                foreach (DescuentoBE dcto in itm.LstCond)
                {
                    if (dcto.Importe != 0m && dcto.Manual)
                    {
                        icond = new BAPICOND();
                        icond.Itm_Number = numVal;
                        icond.Cond_Type = dcto.Condicion;
                        if (dcto.esPorcentaje)
                        {
                            icond.Cond_Value = dcto.Importe;
                        }
                        else
                        {
                            icond.Cond_Value = dcto.Importe * .1m;
                        }
                        ref_Order_conditions_in.Add(icond);
                    }

                    //enviar Precio Neto e IGV
                    pneto = 0m;
                    if (ParametroDALC.esTipoX(dcto.Condicion, "CondPrecios"))
                    {
                        pneto = (dcto.Importe / ((pObjPedido.IGV / 100) + 1m));

                        icond = new BAPICOND();
                        icond.Itm_Number = numVal;
                        icond.Cond_Type = ParametroDALC.getParamValueStatic("CondNeto");
                        icond.Cond_Value = decimal.Round(pneto * .1m, 2); ;//falta rescatar IGV
                        icond.Condvalue = icond.Cond_Value;
                        ref_Order_conditions_in.Add(icond);

                        icond = new BAPICOND();
                        icond.Itm_Number = numVal;
                        icond.Cond_Type = ParametroDALC.getParamValueStatic("CondIGV");
                        icond.Cond_Value = pObjPedido.IGV;
                        icond.Condvalue = decimal.Round((dcto.Importe - pneto) * .1m, 2);//falta rescatar IGV
                        ref_Order_conditions_in.Add(icond);
                    }
                }
                #endregion
            }

            BAPIPARNRTable ref_Order_partners = new BAPIPARNRTable();
            BAPIADDR1Table ref_partneraddresses = new BAPIADDR1Table();

            BAPIPARNR iop = new BAPIPARNR();
            BAPIADDR1 paddr = new BAPIADDR1();
            string mail = "";
            int cont = 0; //rgutierrez 01.12.2011
            string linkAddress = ""; //rgutierrez 06.12.2011

            foreach (InterlocutorBE objInter in pObjPedido.Interlocutores)
            {
                iop = null; paddr = null;
                if (ParametroDALC.esTipoX(objInter.Funcion, "IlocEmpresa"))
                {
                    if (!string.IsNullOrEmpty(objInter.Cliente.Codigo))
                    {
                        List<ClienteBE> lstCliCorregido = new List<ClienteBE>();
                        UsuarioWebBE objU = new UsuarioWebBE();
                        objU.CanalDist = pObjPedido.CanalDist;
                        objU.OrgVentas = pObjPedido.OrgVentas;
                        objU.sector = pObjPedido.Sector;

                        lstCliCorregido = ClienteDALC.Instance().buscarCliente(objInter.Cliente.Codigo, "", objU);

                        iop = new BAPIPARNR();
                        iop.Partn_Role = objInter.Funcion;
                        iop.Partn_Numb = objInter.Cliente.Codigo;
                        iop.Region = lstCliCorregido[0].region;
                        iop.City = lstCliCorregido[0].Ciudad;
                        iop.District = lstCliCorregido[0].Distrito;

                        if (!objInter.Funcion.Equals(ParametroDALC.getParamValueStatic("IlocAgTrans")))
                        {
                            //rgutierrez 16.11.2011
                            //iop.Name = objInter.Cliente.Descripcion.Length > 35 ? objInter.Cliente.Descripcion.Substring(0, 35) : objInter.Cliente.Descripcion;
                            //iop.Name_2 = objInter.Cliente.Descripcion.Length > 35 ? objInter.Cliente.Descripcion.Substring(35) : "";
                            List<string> nombres = new List<string>(Regex.Split(objInter.Cliente.Descripcion, @"(?<=\G.{35})"));
                            iop.Name = nombres[0];
                            iop.Name_2 = nombres.Count > 1 ? nombres[1] : "";
                            iop.Name_3 = nombres.Count > 2 ? nombres[2] : "";
                            iop.Name_4 = nombres.Count > 3 ? nombres[3] : "";

                            iop.Street = objInter.Cliente.Direccion;
                            iop.Postl_Code = objInter.Cliente.CodigoPostal;
                            iop.Telephone = objInter.Cliente.Telefono;
                            //--------------------------------
                            iop.Region = lstCliCorregido[0].region;
                            iop.City = lstCliCorregido[0].Ciudad;
                            iop.District = lstCliCorregido[0].Distrito;

                            if (objInter.Funcion.Equals("RG"))
                            {
                                iop.Region = objInter.Region;
                                iop.City = objInter.Poblacion;
                            }

                            //--------------------------------
                            iop.Title = ParametroDALC.getParamValueStatic("Tratamiento");
                            iop.Langu = "S";

                            //--- falta tabla para mails...
                            //       paddr = new BAPIADDR1();
                            //     paddr.E_Mail = objInter.Cliente.Mail;
                        }
                        iop.Country = objInter.Cliente.Pais;
                    }
                }
                else if (ParametroDALC.esTipoX(objInter.Funcion, "IlocPersona"))
                {
                    if (!string.IsNullOrEmpty(objInter.Persona.CodPersona))
                    {
                        iop = new BAPIPARNR();
                        iop.Partn_Role = objInter.Funcion;
                        iop.Partn_Numb = objInter.Persona.CodPersona;
                    }
                }
                if (iop != null)
                {
                    cont += 1;
                    linkAddress = "$000" + cont;
                    if (ParametroDALC.esTipoX(objInter.Funcion, "IlocStandard")) { iop.Addr_Link = linkAddress; }
                    ref_Order_partners.Add(iop);

                    //rgutierrez 01.12.2011
                    paddr = new BAPIADDR1();
                    paddr.Addr_No = linkAddress;
                    paddr.Name = iop.Name;
                    paddr.Name_2 = iop.Name_2;
                    paddr.Name_3 = iop.Name_3;
                    paddr.Name_4 = iop.Name_4;
                    paddr.City = iop.City;
                    paddr.Region = iop.Region;
                    paddr.District = iop.District;
                    paddr.Postl_Cod1 = iop.Postl_Code;
                    paddr.Street_Lng = iop.Street;
                    paddr.Country = iop.Country;
                    paddr.Langu = iop.Langu;
                    paddr.Tel1_Numbr = iop.Telephone;
                    if (objInter.Funcion.Equals(ParametroDALC.getParamValueStatic("IlocCliente")))
                    {
                        paddr.E_Mail = mail;
                    }
                    if (paddr != null) { ref_partneraddresses.Add(paddr); }
                }
            }

            //tabla de textos
            BAPISDTEXTTable t_text = new BAPISDTEXTTable();
            foreach (TextoBE objTextoItm in pObjPedido.Textos)
            {
                BAPISDTEXT itm = new BAPISDTEXT();
                itm.Text_Id = objTextoItm.CodTexto;
                itm.Text_Line = objTextoItm.Descripcion;
                itm.Langu = objTextoItm.Langu;

                t_text.Add(itm);
            }

            //devuelve el log del proceso
            BAPIRET2Table ref_Return0 = new BAPIRET2Table();
            string returnValue = "";

            //-------------------
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }

            proxy.Zvmc_Sd_040(Order_Header_In, out returnValue, out ex_Salesdocument, ref ref_Order_conditions_in,
                                        ref ref_Order_items_in, ref ref_partneraddresses, ref ref_Order_partners,
                                        ref ref_Return0, ref ref_Order_schedule_in, ref t_text);
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;

            string retVal = "", retMsg = "";
            foreach (BAPIRET2 itemRet in ref_Return0)
            {
                retVal += (itemRet.Type == "E") ? itemRet.Message + "\r\n" : "";
                retMsg += (itemRet.Type != "S" && itemRet.Type != "W") ? itemRet.Message + "\n" : "";
            }
            pNumPedido = ex_Salesdocument;
            if (returnValue == "X")
            {
                //--- grabar nif
                pObjPedido.NumPedido = ex_Salesdocument;
                InterlocutorBE objSolicitante = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocCliente"); });
                if (objSolicitante != null && objSolicitante.Cliente.Eventual)
                {
                    this.grabarNIFPed(pObjPedido);
                }

                   BAPIRET2 itemRet = ref_Return0[ref_Return0.Count - 1];
                if (itemRet.Type == "S")
                {
                    retVal += itemRet.Message + "\n";
                }
                else
                {
                    retVal += "Se creó el doc. de ventas con el número: " + ex_Salesdocument + "\n";
                }
            }
            else
            {
                retVal = retMsg;
            }

            
            return retVal;
        }

        #endregion
        
        #region Campañas

        public List<CampañaBE> listaCampañas(string pOrgVta, string pCamp, string pCanal, string pTienda, string pPobla, DateTime pFecha, string pModelo, string pColor)
        {
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            ZSVMS_CAMPDETTable tablaDetCamp = new ZSVMS_CAMPDETTable();
            ZSVMS_MODXCAMPTable tablaModCamp = new ZSVMS_MODXCAMPTable();
            ZSVMS_LISTACAMPTable tablaCamp = new ZSVMS_LISTACAMPTable();
            string pFechaSap = ParametroDALC.dateNetToSap(pFecha);

            proxy.Zvmc_Sd_020(pCamp, pCanal, pColor, pFechaSap, pModelo, pOrgVta, pPobla, pTienda, ref tablaDetCamp, ref tablaModCamp, ref tablaCamp);
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            /* Manejando el retorno */
            DataTable tblDet = tablaDetCamp.ToADODataTable();
            DataTable tblMod = tablaModCamp.ToADODataTable();
            DataTable tblCampaña = tablaCamp.ToADODataTable();

            List<CampañaBE> lstCampaña = new List<CampañaBE>();
            foreach (DataRow dr in tblCampaña.Rows)
            {
                CampañaBE objCampaña = new CampañaBE();
                objCampaña.campaña = dr["CAMP"].ToString();
                objCampaña.campañaTexto = dr["CAMPT"].ToString();
                objCampaña.orgvta = dr["ORGVTA"].ToString();
                objCampaña.oficina = dr["OFICINA"].ToString();
                objCampaña.canal = dr["CANAL"].ToString();
                objCampaña.cityCode = dr["CITYCODE"].ToString();
                objCampaña.fechaI = ParametroDALC.dateSapToNet(dr["FECHAI"].ToString());
                objCampaña.fechaF = ParametroDALC.dateSapToNet(dr["FECHAF"].ToString());
                objCampaña.cityCodeTexto = dr["CITYCODET"].ToString();
                foreach (DataRow drm in tblMod.Rows)
                {
                    if (drm["CAMP"].ToString() == objCampaña.campaña)
                    {
                        ModeloBE objModelo = new ModeloBE();
                        objModelo.campaña = drm["CAMP"].ToString();
                        objModelo.modelo = drm["MODELO"].ToString();
                        objModelo.modeloTexto = drm["MODELOT"].ToString();
                        objModelo.color = drm["COLOR"].ToString();
                        objModelo.colorTexto = drm["COLORT"].ToString();
                        objCampaña.ListaModelo.Add(objModelo);
                    }
                }
                foreach (DataRow drd in tblDet.Rows)
                {
                    if (drd["CAMP"].ToString() == objCampaña.campaña)
                    {
                        BeneficioBE objDetalle = new BeneficioBE();
                        objDetalle.campaña = drd["CAMP"].ToString();
                        objDetalle.material = drd["MATERIAL"].ToString();
                        objDetalle.materialTexto = drd["MATERIALT"].ToString();
                        objDetalle.cantidad = drd["CANT"].ToString();
                        objCampaña.ListaBeneficio.Add(objDetalle);
                    }
                }
                lstCampaña.Add(objCampaña);
            }

            return lstCampaña;
        }

        #endregion

        #region ListaPedidosVMS

        public List<PedidoBE> ListaPedidoVMS(string nroDoc, string nroLote, DateTime fechaI, DateTime fechaF, string nroPer, string orgVta, string canal, string tienda, string docRef, string nroMat, string nomCli, string nif, string codCli, string txtPos, string tipoDoc)
        {
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            string pFechaF = ParametroDALC.dateNetToSap(fechaF);
            string pFechaI = ParametroDALC.dateNetToSap(fechaI);

            VBAKTable tblCab = new VBAKTable();
            ZSVMS_DETPOSTable tblDet = new ZSVMS_DETPOSTable();

            proxy.Zvmc_Sd_021(nomCli, txtPos, nroLote, pFechaF, pFechaI, codCli, nroMat, nroPer, nif, tipoDoc, nroDoc, tienda, orgVta, canal, docRef, ref tblCab, ref tblDet);
            //proxy.Zvmc_Sd_021(nomCli, txtPos, nroLote, pFechaF, pFechaI, codCli, nroMat, nroPer, nif, tipoDoc, nroDoc, "", "", "", docRef, ref tblCab, ref tblDet);
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            /* Manejando el retorno */
            DataTable dt = tblCab.ToADODataTable();
            DataTable dtm = tblDet.ToADODataTable();
            List<PedidoBE> lstPedidos = new List<PedidoBE>();
            PedidoBE obj = new PedidoBE();

            foreach (DataRow dr in dt.Rows)
            {
                obj = new PedidoBE();
                obj.ClaseDocumento = dr["BSTNK"].ToString();
                obj.TotalConIgv = Convert.ToDecimal(dr["NETWR"].ToString());
                obj.NumPedidoCorto = dr["VBELN"].ToString();
                obj.CodClienteCorto = dr["KUNNR"].ToString();
                obj.Fecha = ParametroDALC.dateSapToNet(dr["ERDAT"].ToString());
                obj.CondPago = dr["GRUPP"].ToString();
                obj.CodTipoDoc = dr["AUART"].ToString();
                obj.DestFactura = dr["KTEXT"].ToString();
                obj.DestMercaderia = dr["ERNAM"].ToString();
                obj.ListaReserva = new List<ReservaBE>();
                foreach (DataRow drm in dtm.Rows)
                {
                    if ((drm["VBELN"].ToString().TrimStart('0')) == obj.NumPedidoCorto)
                    {
                        ReservaBE objR = new ReservaBE();
                        objR.posicion = drm["POSNR"].ToString();
                        objR.codMaterial = drm["MATNR"].ToString().TrimStart('0');
                        objR.descMaterial = drm["MAKTX"].ToString();
                        objR.cantidad = Convert.ToDecimal(drm["KWMENG"].ToString());
                        objR.total = Convert.ToDecimal(drm["KZWI4"].ToString());
                        objR.motivoRechazo = drm["ABGRU"].ToString();
                        objR.lote = drm["CHARG"].ToString();
                        objR.motor = drm["ZZMOTOR"].ToString();
                        objR.vin = drm["VHVIN"].ToString();
                        objR.status = drm["SDSTA"].ToString();
                        objR.disponibilidad = drm["AVAIL"].ToString();
                        objR.emplazamiento = drm["LOCTN"].ToString();
                        objR.marca = drm["ZZMARCA"].ToString();
                        objR.descColor = drm["ZZCOLOR_DESC"].ToString();
                        objR.añoFab = drm["ZZANOFAB"].ToString();
                        objR.marcaRepuesto = drm["MARCA"].ToString();
                        objR.modeloRepuesto = drm["MODELO"].ToString();
                        obj.ListaReserva.Add(objR);
                    }
                }
                lstPedidos.Add(obj);
            }
            return lstPedidos;
        }

        #endregion

        #region ListaPedidosRep

        public List<PedidoBE> ListaPedidoRep(string nroDoc, string nroLote, DateTime fechaI, DateTime fechaF, string nroPer, string orgVta, string canal, string tienda, string docRef, string nroMat, string nomCli, string nif, string codCli, string txtPos)
        {
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            string pFechaF = ParametroDALC.dateNetToSap(fechaF);
            string pFechaI = ParametroDALC.dateNetToSap(fechaI);

            VBAKTable tblCab = new VBAKTable();
            ZSVMS_DETPOSTable tblDet = new ZSVMS_DETPOSTable();

            proxy.Zvmc_Sd_026(nomCli, txtPos, nroLote, pFechaF, pFechaI, codCli, nroMat, nroPer, nif, nroDoc, tienda, orgVta, canal, docRef, ref tblCab, ref tblDet);
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            /* Manejando el retorno */
            DataTable dt = tblCab.ToADODataTable();
            DataTable dtm = tblDet.ToADODataTable();
            List<PedidoBE> lstPedidos = new List<PedidoBE>();
            PedidoBE obj = new PedidoBE();

            foreach (DataRow dr in dt.Rows)
            {
                obj = new PedidoBE();
                obj.ClaseDocumento = dr["BSTNK"].ToString();
                obj.TotalConIgv = Convert.ToDecimal(dr["NETWR"].ToString());
                obj.NumPedidoCorto = dr["VBELN"].ToString();
                obj.CodClienteCorto = dr["KUNNR"].ToString();
                obj.Fecha = ParametroDALC.dateSapToNet(dr["ERDAT"].ToString());
                obj.CondPago = dr["GRUPP"].ToString();
                obj.CodTipoDoc = dr["AUART"].ToString();
                obj.DestFactura = dr["KTEXT"].ToString();
                obj.DestMercaderia = dr["ERNAM"].ToString();
                obj.Moneda = dr["WAERK"].ToString();
                if (dr["ANGDT"].ToString() == "00000000")
                {
                    obj.FechaInicio = null;
                }
                else
                {
                    obj.FechaInicio = ParametroDALC.dateSapToNet(dr["ANGDT"].ToString());
                }
                if (dr["BNDDT"].ToString() == "00000000")
                {
                    obj.FechaFin = null;
                }
                else
                {
                    obj.FechaFin = ParametroDALC.dateSapToNet(dr["BNDDT"].ToString());
                }                
                obj.ListaReserva = new List<ReservaBE>();
                foreach (DataRow drm in dtm.Rows)
                {
                    if ((drm["VBELN"].ToString().TrimStart('0')) == obj.NumPedidoCorto)
                    {
                        ReservaBE objR = new ReservaBE();
                        objR.posicion = drm["POSNR"].ToString();
                        objR.codMaterial = drm["MATNR"].ToString().TrimStart('0');
                        objR.descMaterial = drm["MAKTX"].ToString();
                        objR.cantidad = Convert.ToDecimal(drm["KWMENG"].ToString());
                        objR.unidadMedida = drm["VRKME"].ToString();
                        objR.total = Convert.ToDecimal(drm["KZWI1"].ToString());
                        objR.marcaRepuesto = drm["MARCA"].ToString();
                        objR.modeloRepuesto = drm["MODELO"].ToString();
                        obj.ListaReserva.Add(objR);
                    }
                }
                lstPedidos.Add(obj);
            }
            return lstPedidos;
        }

        #endregion

        #region ListaFacturasVMS

        public List<PedidoBE> ListaFacturasVMS(string nroFac, string nroFolio, DateTime fechaI, DateTime fechaF, string codCli, string orgVta, string canal, string centro, string sector, string tienda, string codMat, string nroLote, string nroPer)
        {
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            string pFechaF = ParametroDALC.dateNetToSap(fechaF);
            string pFechaI = ParametroDALC.dateNetToSap(fechaI);

            ZSVMS_CABFACTTable tblCab = new ZSVMS_CABFACTTable();
            ZSVMS_DETPOSTable tblDet = new ZSVMS_DETPOSTable();

            if (nroPer == null)
            {
                nroPer = "999999999";
            }

            proxy.Zvmc_Sd_022(nroLote, pFechaF, pFechaI, "", "", codCli, codMat, nroPer, sector, nroFac, tienda, orgVta, canal, centro, nroFolio, ref tblCab, ref tblDet);
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            /* Manejando el retorno */
            DataTable dt = tblCab.ToADODataTable();
            DataTable dtm = tblDet.ToADODataTable();
            List<PedidoBE> lstPedidos = new List<PedidoBE>();
            PedidoBE obj = new PedidoBE();

            foreach (ZSVMS_CABFACT itemCab in tblCab)
            {
                obj = new PedidoBE();
                obj.NumPedidoCorto = itemCab.Vbeln.TrimStart('0');
                obj.folioLegal = itemCab.Xblnr;
                obj.Fecha = ParametroDALC.dateSapToNet(itemCab.Fkdat);
                obj.nomCliente = itemCab.Cliente;
                obj.totalFact = Convert.ToDecimal(itemCab.Valorvta);
                obj.compensacion = itemCab.Compen;
                obj.CodCliente = itemCab.Nif;
                obj.Vendedor1 = itemCab.Vendedor;
                obj.CondPago = itemCab.Zterm;
                obj.Vendedor1 = itemCab.Vendedor;
                obj.ListaReserva = new List<ReservaBE>();

                foreach (ZSVMS_DETPOS itemDet in tblDet)
                {
                    if (itemDet.Vbeln.TrimStart('0') == obj.NumPedidoCorto)
                    {
                        ReservaBE objR = new ReservaBE();
                        objR.posicion = itemDet.Posnr;
                        objR.codMaterial = itemDet.Matnr.TrimStart('0');
                        objR.descMaterial = itemDet.Maktx;
                        objR.lote = itemDet.Vhcle.TrimStart('0');
                        objR.motor = itemDet.Zzmotor;
                        objR.vin = itemDet.Vhvin;
                        objR.status = itemDet.Sdsta;
                        objR.disponibilidad = itemDet.Avail;
                        objR.emplazamiento = itemDet.Loctn.TrimStart('0');
                        objR.marca = itemDet.Zzmarca;
                        objR.color = itemDet.Zzcolor;
                        objR.añoFab = itemDet.Zzanofab;
                        objR.añoModelo = itemDet.Zzano_Modelo;
                        objR.grupoArticulo = itemDet.Matkl;
                        objR.pedidoSap = itemDet.Vgbel.TrimStart('0');
                        obj.ListaReserva.Add(objR);
                    }
                }
                lstPedidos.Add(obj);
            }

            return lstPedidos;
        }

        #endregion

        #region ListaFacturasRepuestos

        public List<PedidoBE> ListaFacturasRep(string nroFac, string nroFolio, DateTime fechaI, DateTime fechaF, string codCli, string orgVta, string canal, string centro, string sector, string tienda, string codMat, string nroLote, string nroPer)
        {
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            string pFechaF = ParametroDALC.dateNetToSap(fechaF);
            string pFechaI = ParametroDALC.dateNetToSap(fechaI);

            ZSVMS_CABFACTTable tblCab = new ZSVMS_CABFACTTable();
            ZSVMS_DETPOSTable tblDet = new ZSVMS_DETPOSTable();

            if (nroPer == null)
            {
                nroPer = "999999999";
            }

            proxy.Zvmc_Sd_010(codCli, nroLote, pFechaF, pFechaI, "", "", "", codMat, nroPer, sector, nroFac, tienda, orgVta, canal, centro, nroFolio, ref tblCab, ref tblDet);
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            /* Manejando el retorno */
            DataTable dt = tblCab.ToADODataTable();
            DataTable dtm = tblDet.ToADODataTable();
            List<PedidoBE> lstPedidos = new List<PedidoBE>();
            PedidoBE obj = new PedidoBE();

            foreach (ZSVMS_CABFACT itemCab in tblCab)
            {
                obj = new PedidoBE();
                obj.NumPedidoCorto = itemCab.Vbeln.TrimStart('0');
                obj.folioLegal = itemCab.Xblnr;
                obj.Fecha = ParametroDALC.dateSapToNet(itemCab.Fkdat);
                obj.nomCliente = itemCab.Cliente;
                obj.totalFact = Convert.ToDecimal(itemCab.Valorvta);
                obj.compensacion = itemCab.Compen;
                obj.CodCliente = itemCab.Nif;
                obj.Vendedor1 = itemCab.Vendedor;
                obj.Moneda = itemCab.Moneda;
                obj.ListaReserva = new List<ReservaBE>();

                foreach (ZSVMS_DETPOS itemDet in tblDet)
                {
                    if (itemDet.Vbeln.TrimStart('0') == obj.NumPedidoCorto)
                    {
                        ReservaBE objR = new ReservaBE();
                        objR.posicion = itemDet.Posnr;
                        objR.codMaterial = itemDet.Matnr.TrimStart('0');
                        objR.descMaterial = itemDet.Maktx;
                        objR.pedidoSap = itemDet.Vgbel.TrimStart('0');
                        obj.ListaReserva.Add(objR);
                    }
                }
                lstPedidos.Add(obj);
            }

            return lstPedidos;
        }

        #endregion

        #region CrearPed.Vta.VMS

        public List<string> CrearPedVtaVMS(DateTime fecha, string moneda, string condPago, string orgVtas, string canal, 
            string sector, string codCliente, string nroPed, string codDestMer, string codResPago, string motPedido, 
            string funcionVE, string oficina, string vendedorSAP, string entFin, string grpVen, string flete, string recTecho,
            string seguro, string dscto, string porcentaje, List<string> lstLote, List<GenericBE> lstStatus, 
            string puestoExp, string nroDocReferencia)
        {
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            BAPIDLV_RANGE_CHARGTable listaLote = new BAPIDLV_RANGE_CHARGTable();
            BAPIDLV_RANGE_CHARG itemLote = null;
            foreach (string itm in lstLote)
            {
                itemLote = new BAPIDLV_RANGE_CHARG();
                itemLote.Batch_Low = itm; itemLote.Option0 = "EQ"; itemLote.Sign = "I";
                listaLote.Add(itemLote);
            }

            VLCACTDATA data = new VLCACTDATA();
            data.Currency = moneda;
            data.Pmnttrms = condPago;
            data.Vkorg = orgVtas;
            data.Vtweg = canal;
            data.Spart = sector;
            data.Kunnr = codCliente;
            data.Vdatu = ParametroDALC.dateNetToSap(fecha);
            data.Bstnk = nroPed;
            data.Kunwe = codDestMer;
            data.Kunrg = codResPago;
            data.Augru = motPedido;
            data.Vhusg = funcionVE;
            data.Zzvkbur = oficina;
            data.Zzvendedor = vendedorSAP;
            data.Zzentidad_Fin = entFin;
            data.Zzvkgrp = grpVen;
            data.Zzflete = Convert.ToDecimal(flete); ;
            data.Zzrecargo = Convert.ToDecimal(recTecho);
            data.Zzseguro = Convert.ToDecimal(seguro);
            data.Zzdescuento = Convert.ToDecimal(dscto);
            data.Zzporcentaje = porcentaje;
            data.Zzvstel = puestoExp;
            data.Ref_Doc_No = nroDocReferencia.Equals("0000000000") ? "" : nroDocReferencia;

            DYCBOXTable dy = new DYCBOXTable();

            DYCBOXTable lstSta = new DYCBOXTable();
            DYCBOX sta;

            foreach (GenericBE itm in lstStatus)
            {
                sta = new DYCBOX();
                sta.Fieldname = itm.Codigo;
                sta.Helpid = itm.Descripcion;
                lstSta.Add(sta);
            }

            proxy.Zvmc_Sd_039(data, ref dy, ref listaLote, ref lstSta);

            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;

            DataTable dt = dy.ToADODataTable();
            List<string> listaResult = new List<string>();
            foreach (DataRow dr in dt.Rows)
            {
                string st = dr["HELPID"].ToString();
                listaResult.Add(st);
            }
            return listaResult;
        }

        #endregion

        public List<string> RechazarPedido(DateTime fechaInicio, DateTime fechaFin, string orgVtas, string canal, string codCliente, string oficina, List<string> lstLote)
        {
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            ZTTZSVMS_STOCK listaLote = new ZTTZSVMS_STOCK();
            ZSVMS_STOCK itemLote = new ZSVMS_STOCK();

            foreach (string itm in lstLote)
            {
                itemLote = new ZSVMS_STOCK();
                itemLote.Zlote = itm;
                listaLote.Add(itemLote);
            }

            DYCBOXTable dy = new DYCBOXTable();

            proxy.Zvmc_Sd_007(listaLote, ref dy);

            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;

            DataTable dt = dy.ToADODataTable();
            List<string> listaResult = new List<string>();
            foreach (DataRow dr in dt.Rows)
            {
                string st = dr["HELPID"].ToString();
                listaResult.Add(st);
            }
            return listaResult;
        }

        
        public string InsertPago(CabPagoBE objPago, List<DetPagosBE> lstPagos, List<DetPedFacBE> lstPedFac, out string tipoMensaje)
        {
            string ped = "", result = ""; tipoMensaje = "";
            List<string> lstRes = new List<string>();
            try
            {
                PedidosProxy proxy = new PedidosProxy();
                int corr = 0;
                string correl = DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString();
                proxy.Connection = DALC.getConnection;
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }

                ZTVMC_CAB_PAGO objP = new ZTVMC_CAB_PAGO();
                ZTVMC_DET_PAGOSTable tDetP = new ZTVMC_DET_PAGOSTable();
                ZTVMC_DET_PEDFACTable tDetPF = new ZTVMC_DET_PEDFACTable();
                ZTVMC_DET_PAGOS objDetP = new ZTVMC_DET_PAGOS();
                ZTVMC_DET_PEDFAC objDetPF = new ZTVMC_DET_PEDFAC();
                BAPIRET2Table tReturn = new BAPIRET2Table();
                objP.Correlativo = correl;
                objP.Caja = objPago.Caja;
                objP.Fecha = ParametroDALC.dateNetToSap(objPago.Fecha);
                objP.Turno = "1";
                objP.Cajero = objPago.Cajero;
                objP.Monto_T = objPago.Monto_T;
                objP.Vuelto = objPago.Vuelto;
                objP.Waers_Vuelto = objPago.Waers_Vuelto;
                objP.Cant_Fact = (byte)objPago.Cant_Fact;
                objP.Boveda = objPago.Boveda;

                foreach (DetPagosBE item in lstPagos)
                {
                    corr = corr + 1;
                    objDetP = new ZTVMC_DET_PAGOS();
                    objDetP.Correlativo = correl;
                    objDetP.Corr_Pago = Convert.ToByte( corr );
                    objDetP.Caja = item.Caja;
                    objDetP.Fecha = ParametroDALC.dateNetToSap(item.Fecha);
                    objDetP.Turno = "1";
                    objDetP.Cajero = item.Cajero;
                    objDetP.Nro_Pedido = item.Nro_Pedido;
                    objDetP.Tipo = item.Tipo;
                    objDetP.Moneda = item.Moneda;
                    objDetP.Monto = item.Monto;
                    objDetP.Operador = item.Operador;
                    objDetP.Operacion = item.Operacion;

                    tDetP.Add(objDetP);
                }

                foreach (DetPedFacBE item in lstPedFac)
                {
                    objDetPF.Correlativo = correl;
                    objDetPF.Corr_Ped_Fact = 1;
                    objDetPF.Caja = item.Caja;
                    objDetPF.Fecha = ParametroDALC.dateNetToSap(item.Fecha);
                    objDetPF.Turno = "1";
                    objDetPF.Cajero = item.Cajero;
                    objDetPF.Nro_Pedido = item.NroPedido;
                    objDetPF.Monto_Pedido = item.Monto;
                    objDetPF.Tipo = item.Tipo;
                    objDetPF.Folio = item.Folio;

                    tDetPF.Add(objDetPF);
                }
                
                proxy.Zvmc_Sd_030(objPago.auart, objP, objPago.nro_cotizacion, out ped, ref tReturn, ref tDetP, ref tDetPF);

                SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
                proxy.Connection = null;
                foreach (BAPIRET2 item in tReturn)
                {
                    if (item.Type == "E")
                    {
                        ped = item.Message + ". ";
                        tipoMensaje = item.Type;
                    }
                    else
                    {
                        result = item.Message + ". ";
                        tipoMensaje = item.Type;
                    }
                }
            }
            catch (Exception ex)
            {
                result = ex.Message;
            }

            return ped;
        }

        public Boolean reenumerar(int pfolio_old, int pfolio_new, string pcaja, string ptipo, string pnroPedido, out string nroPedido)
        {
            Boolean rpta = true;
            string ok = "";
            nroPedido = "";
            try {
                PedidosProxy proxy = new PedidosProxy();
                proxy.Connection = DALC.getConnection;
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
                //proxy.Zvmc_Sd_032(pfolio_new.ToString(), pfolio_old.ToString(), ptipo.ToString(), pcaja.ToString(), out nroPedido, out ok); //10.07.2013
                proxy.Zvmc_Sd_032(pfolio_new.ToString(),(Int64.Parse( pnroPedido)).ToString().ToString(), ptipo.ToString(), pcaja.ToString(), out nroPedido, out ok);
                SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
                proxy.Connection = null;
                rpta = true;
                if (ok.Equals("E"))
                {
                    rpta = false;
                }
            }
            catch(Exception ex)
            {
                rpta = false;
            }


            return rpta;
        }

        public List<ValidacionStock> validacionStock(string pNumPedido)
        {
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            ZSSD_GENERALTable listResult = new ZSSD_GENERALTable();
            ZSSD_GENERAL objResult = new ZSSD_GENERAL();

            proxy.Zvmc_Sd_049(pNumPedido, ref listResult);

            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;

            DataTable dt = listResult.ToADODataTable();
            List<ValidacionStock> listaRes = new List<ValidacionStock>();
            ValidacionStock objRes = null;
            foreach (DataRow dr in dt.Rows)
            {
                objRes = new ValidacionStock();
                objRes.posicion = dr["VALOR1"].ToString();
                objRes.codigoMaterial = dr["VALOR2"].ToString();
                objRes.descripcionMaterial = dr["VALOR3"].ToString();
                objRes.estado = dr["VALOR4"].ToString();
                objRes.cantidadConfirmada = Convert.ToDecimal(dr["NUMERO1"]);
                objRes.cantidadPedido = Convert.ToDecimal(dr["NUMERO2"]);

                listaRes.Add(objRes);
            }
            return listaRes;
        }
    }
}
